<!DOCTYPE html>
<html lang="zh-CN">





<head>
  <meta charset="UTF-8">
  <link rel="apple-touch-icon" sizes="76x76" href="/img/apple-touch-icon.png">
  <link rel="icon" type="image/png" href="/img/favicon.png">
  <meta name="viewport"
        content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, shrink-to-fit=no">
  <meta http-equiv="x-ua-compatible" content="ie=edge">
  <meta name="description" content="">
  <meta name="author" content="yhs0092">
  <meta name="keywords" content="ServiceComb,开源">
  <title>开源项目没有那么遥远 ~ 遥·海·时 的博客</title>

  <link rel="stylesheet" href="https://cdn.staticfile.org/font-awesome/5.10.2/css/all.min.css"  >
<link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/4.3.1/css/bootstrap.min.css"  >
<link rel="stylesheet" href="https://cdn.staticfile.org/mdbootstrap/4.8.9/css/mdb.min.css"  >
<link rel="stylesheet" href="https://cdn.staticfile.org/github-markdown-css/3.0.1/github-markdown.min.css"  >

<link rel="stylesheet" href="//at.alicdn.com/t/font_1067060_qzomjdt8bmp.css">



  <link rel="stylesheet" href="/lib/prettify/github-v2.min.css"  >

<link rel="stylesheet" href="/css/main.css"  >


  <link rel="stylesheet" href="https://cdn.staticfile.org/fancybox/3.5.7/jquery.fancybox.min.css"  >


<meta name="generator" content="Hexo 4.2.0"></head>


<body>
  <header style="height: 70vh;">
    <nav id="navbar" class="navbar fixed-top  navbar-expand-lg navbar-dark scrolling-navbar">
  <div class="container">
    <a class="navbar-brand"
       href="/">&nbsp;<strong>遥·海·时 的博客</strong>&nbsp;</a>

    <button id="navbar-toggler-btn" class="navbar-toggler" type="button" data-toggle="collapse"
            data-target="#navbarSupportedContent"
            aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
      <div class="animated-icon"><span></span><span></span><span></span></div>
    </button>

    <!-- Collapsible content -->
    <div class="collapse navbar-collapse" id="navbarSupportedContent">
      <ul class="navbar-nav ml-auto text-center">
        
          
          
          <li class="nav-item">
            <a class="nav-link" href="/">Home</a>
          </li>
        
          
          
          <li class="nav-item">
            <a class="nav-link" href="/archives/">Archives</a>
          </li>
        
          
          
          <li class="nav-item">
            <a class="nav-link" href="/categories/">Categories</a>
          </li>
        
          
          
          <li class="nav-item">
            <a class="nav-link" href="/tags/">Tags</a>
          </li>
        
          
          
          <li class="nav-item">
            <a class="nav-link" href="/about/">About</a>
          </li>
        
        
          <li class="nav-item" id="search-btn">
            <a class="nav-link" data-toggle="modal" data-target="#modalSearch">&nbsp;&nbsp;<i
                class="iconfont icon-search"></i>&nbsp;&nbsp;</a>
          </li>
        
      </ul>
    </div>
  </div>


</nav>

    <div class="view intro-2" id="background"
         style="background: url('/img/post-banner.jpg')no-repeat center center;
           background-size: cover;
           background-attachment: fixed;">
      <div class="full-bg-img">
        <div class="mask rgba-black-light flex-center">
          <div class="container text-center white-text fadeInUp">
            <span class="h2" id="subtitle">
              
            </span>

            
              <br>
              
                <p class="mt-3">
                  <i class="fas fa-calendar-alt" aria-hidden="true"></i>&nbsp;
                  星期日, 十一月 18日 2018, 10:41 晚上
                </p>
              

              <p>
                
                  
                  &nbsp;<i class="far fa-chart-bar"></i>
                  <span class="post-count">
                    1.7k 字
                  </span>&nbsp;
                

                
                  
                  &nbsp;<i class="far fa-clock"></i>
                  <span class="post-count">
                      5 分钟
                  </span>&nbsp;
                

                
                  <!-- 不蒜子统计文章PV -->
                  
                  &nbsp;<i class="far fa-eye" aria-hidden="true"></i>&nbsp;
                  <span id="busuanzi_container_page_pv">
                    <span id="busuanzi_value_page_pv"></span> 次
                  </span>&nbsp;
                
              </p>
            
          </div>

          
        </div>
      </div>
    </div>
  </header>

  <main>
    
      

<div class="container-fluid">
  <div class="row">
    <div class="d-none d-lg-block col-lg-2"></div>
    <div class="col-lg-8 nopadding-md">
      <div class="py-5 z-depth-3" id="board">
        <div class="post-content mx-auto" id="post">
          <div class="markdown-body">
            <p>从小白到Apache项目Committer的成长之路。</p>
<a id="more"></a>
<h1 id="开源项目没有那么遥远"><a href="#开源项目没有那么遥远" class="headerlink" title="开源项目没有那么遥远"></a>开源项目没有那么遥远</h1><blockquote>
<p>前几天收到了Apache ServiceComb PMC的邀请邮件，这意味着我成为了一名Apache ServiceComb项目的Committer。喜悦之余，我想留下一篇博客作为自己工作的一个阶段性总结，同时也希望这篇文章能够给其他想要加入到开源社区的同学一点参考。</p>
</blockquote>
<h2 id="初次接触ServiceComb"><a href="#初次接触ServiceComb" class="headerlink" title="初次接触ServiceComb"></a>初次接触ServiceComb</h2><p>最开始接触到“开源”的概念是在大学的计算机课程上，当时对于开源项目的印象就是：开源项目是由一群大牛程序员开发和维护的，作为小白的我只需要拿来用就好了。</p>
<p>毕业之后参加工作，我被分到了一个跟开源项目相关的工作组，需要向<a href="https://servicecomb.apache.org/cn/" target="_blank" rel="noopener" title="ServiceComb官网">Apache ServiceComb项目</a>提交代码。当时的心情真是既新奇又紧张，毕竟以前只是单纯地使用过开源软件，而现在自己终于要向开源软件项目提交代码了。这种能够在一个开源项目中提交自己代码的兴奋感，相信很多学软件专业的同学应该能够理解。但是自己又是刚开始工作的小白，担心自己写的代码太差了拿不出手，因此又紧张不已。而事实上我第一次提交代码的经过并没有预想中的那么多波折，作为一个开源小白，提上去的pull request有瑕疵是很正常的事情，根据检视者的意见修改好了就行——毕竟高手不一定高冷，社区的开发者们都是很热心的。</p>
<p>有了第一次提交PR的经历后，后面的工作就慢慢变得轻车熟路了。平常我在开源社区主要做的就是领一些新特性或者修复bug的<a href="https://issues.apache.org/jira/projects/SCB/issues" target="_blank" rel="noopener" title="Apache issues">issue</a>处理，提交代码或文档的修改。</p>
<h2 id="参与的方式不仅仅是写代码……"><a href="#参与的方式不仅仅是写代码……" class="headerlink" title="参与的方式不仅仅是写代码……"></a>参与的方式不仅仅是写代码……</h2><p>如前文所提到的，最初我参与Apache ServiceComb开源项目的内容是由工作驱动的。因为有一些新特性要完成，或者因为有一些bug要修复，所以我需要提交代码和更新相关文档。而在代码和文档之外的其他事务我并没有参与多少。</p>
<p>其实从我开始向ServiceComb提交代码时，我就订阅了<a href="https://servicecomb.apache.org/cn/developers/subscribe-mail-list/" target="_blank" rel="noopener" title="订阅邮件">Apache ServiceComb的邮件列表</a>，也加入了<a href="https://servicecomb.apache.org/cn/developers/use-gitter/" target="_blank" rel="noopener" title="使用Gitter">Gitter聊天室</a>。不过由于对自己的技术没什么自信，也受限于内向的性格，我在这些沟通渠道内长期保持着旁观的状态。当时的想法是，讨论ServiceComb设计和发展的事情我又参与不了，看看大佬们讨论就可以，到时候我再捞几个issue来做就好了。然而这种想法是不对的，对于我们自身在开源社区中的发展也没有好处。要参与开源社区的事务，仅仅只是埋头提交代码是不够的，积极参与社区的讨论、沟通，保持自己在社区中的活跃度，也是评判自己在社区工作好坏的一项标准。这也符合Apache之道中“社区胜于代码”的理念。此外，把将要进行的事情放到邮件中讨论，也是一个文档归档的过程。后续想要回溯某个特性为什么会被加进来，或者某个bug是如何触发的时候，搜索相关的邮件就可以了。如果有新的贡献者想要参与到社区开发工作中来，他们也可以通过查阅邮件来了解很多信息。这在无形中节省了很多后续的维护和沟通成本。</p>
<p>参与社区讨论的活跃程度也是评判一个开发者能否成为committer的重要标准。听先前已经进入ServiceComb社区的同事说，其实按照我的代码提交量来看，在之前我就可以成为committer了，然而由于我在社区沟通中的活跃度实在是太低了，所以才一直没有受到ServiceComb PMC的committer邀请……所以说，同学们一定不要被自己的腼腆性格坑了啊，要参与社区事务，就需要更积极地加入到讨论中来。</p>
<h2 id="给有意者的一些建议"><a href="#给有意者的一些建议" class="headerlink" title="给有意者的一些建议"></a>给有意者的一些建议</h2><p>参与一个开源项目，对于自己阅读文档、分析源码、开发和沟通的能力都有很大的益处。这和开发一个业务系统是两种完全不同的体验，对于拓展个人的视野和经验很有帮助，我想大家应该从各种文章里了解很多了，我在这里就不多讲了 : )</p>
<p>如果想要参与到一个开源项目中，可以首先了解一下如何使用这个项目。给开源社区做贡献的方式不仅仅限于提交代码，<a href="https://github.com/apache/servicecomb-docs" target="_blank" rel="noopener" title="ServiceComb文档项目">修复文档问题</a>可能是一个更好的切入点。通过阅读和修复文档问题，我们可以了解到一个项目的主要特性，这对于我们进一步了解项目源码也是很有帮助的。</p>
<p>同时，<a href="https://servicecomb.apache.org/cn/developers/subscribe-mail-list/" target="_blank" rel="noopener" title="订阅邮件">订阅邮件列表</a>和<a href="https://servicecomb.apache.org/cn/developers/use-gitter/" target="_blank" rel="noopener" title="使用Gitter">使用Gitter</a>也很有必要。通过这些，我们不仅可以了解到项目的最新动态，也能够参与到社区的讨论中来。如果还不了解如何发起一场讨论的话，可以先看看社区里的开发者是怎么做的，参与到其他人的邮件讨论中去。碰到其他的使用者提问也可以上去帮助解答，这同样是一种参与贡献的方式。上文已经提到过了，参与讨论沟通是社区活动的重要内容。不用感到不好意思，开源社区本身就是开放的，我们欢迎更多的人能够参与到项目的建设中来。</p>
<p>正所谓临渊羡鱼，不如退而结网。与其羡慕已经成功参与到开源项目中的同学，不如从现在开始行动，选择一个开源项目参与进去 ; )</p>
<p>文章的最后，我想向给与我帮助和鼓励的社区团队成员致以感谢，谢谢大家热心的帮助和指导，让我从一名小白成长为Apache committer。</p>
<blockquote>
<p>ps：在这里小小地安利一下，<a href="https://servicecomb.apache.org/cn/" target="_blank" rel="noopener" title="ServiceComb官网">Apache ServiceComb项目</a>已经从Apache孵化器毕业，正式成为Apache顶级项目，这也是业界首个微服务项目在Apache孵化并毕业成为顶级项目。ServiceComb中包含的几个子项目都处于如火如荼的发展势头中，欢迎大家参与到ServiceComb社区建设中来~</p>
</blockquote>

            <hr>
          </div>
          <br>
          <div>
            <p>
            
              <span>
                <i class="iconfont icon-inbox"></i>
                
                  <a class="hover-with-bg" href="/categories/%E8%81%8C%E4%B8%9A%E5%8F%91%E5%B1%95">职业发展</a>
                  &nbsp;
                
              </span>&nbsp;&nbsp;
            
            
              <span>
                <i class="iconfont icon-tag"></i>
                
                  <a class="hover-with-bg" href="/tags/ServiceComb">ServiceComb</a>
                
                  <a class="hover-with-bg" href="/tags/%E5%BC%80%E6%BA%90">开源</a>
                
              </span>
            
            </p>
            
              <p class="note note-warning">本博客所有文章除特别声明外，均采用 <a href="https://zh.wikipedia.org/wiki/Wikipedia:CC_BY-SA_3.0%E5%8D%8F%E8%AE%AE%E6%96%87%E6%9C%AC" target="_blank" rel="nofollow noopener noopener">CC BY-SA 3.0协议</a> 。转载请注明出处！</p>
            
          </div>
        </div>
      </div>
    </div>
    <div class="d-none d-lg-block col-lg-2 toc-container">
      
  <div id="toc">
    <p class="h4"><i class="far fa-list-alt"></i>&nbsp;目录</p>
    <div id="tocbot"></div>
  </div>

    </div>
  </div>
</div>

<!-- custom -->


<!-- Comments -->
<div class="col-lg-7 mx-auto nopadding-md">
  <div class="container comments mx-auto" id="comments">
    
  </div>
</div>

    
  </main>

  
    <a class="z-depth-1" id="scroll-top-button" href="#" role="button">
      <i class="fa fa-chevron-up scroll-top-arrow" aria-hidden="true"></i>
    </a>
  

  
    <div class="modal fade" id="modalSearch" tabindex="-1" role="dialog" aria-labelledby="ModalLabel"
     aria-hidden="true">
  <div class="modal-dialog modal-dialog-scrollable modal-lg" role="document">
    <div class="modal-content">
      <div class="modal-header text-center">
        <h4 class="modal-title w-100 font-weight-bold">搜索</h4>
        <button type="button" id="local-search-close" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body mx-3">
        <div class="md-form mb-5">
          <input type="text" id="local-search-input" class="form-control validate">
          <label data-error="x" data-success="v"
                 for="local-search-input">关键词</label>
        </div>
        <div class="list-group" id="local-search-result"></div>
      </div>
    </div>
  </div>
</div>
  

  <footer class="mt-5">
  <div class="text-center py-3">
    <a href="https://hexo.io" target="_blank" rel="nofollow noopener"><b>Hexo</b></a>
    <i class="iconfont icon-love"></i>
    <a href="https://github.com/fluid-dev/hexo-theme-fluid" target="_blank" rel="nofollow noopener"> <b>Fluid</b></a>
    <br>

    
  
    <!-- 不蒜子统计PV -->
    
    &nbsp;<span id="busuanzi_container_site_pv">总访问量 
          <span id="busuanzi_value_site_pv"></span> 次</span>&nbsp;
  
  
    <!-- 不蒜子统计UV -->
    
    &nbsp;<span id="busuanzi_container_site_uv">总访客数 
            <span id="busuanzi_value_site_uv"></span> 人</span>&nbsp;
  
  <br>



    

  </div>
</footer>

<!-- SCRIPTS -->
<script src="https://cdn.staticfile.org/jquery/3.4.1/jquery.min.js" ></script>
<script src="https://cdn.staticfile.org/popper.js/1.15.0/umd/popper.min.js" ></script>
<script src="https://cdn.staticfile.org/twitter-bootstrap/4.3.1/js/bootstrap.min.js" ></script>
<script src="https://cdn.staticfile.org/mdbootstrap/4.8.9/js/mdb.min.js" ></script>
<script src="/js/main.js" ></script>


  <script src="/js/lazyload.js" ></script>



  
    <script src="https://cdn.staticfile.org/tocbot/4.8.0/tocbot.min.js" ></script>
  
  <script src="/js/post.js" ></script>



  <script src="https://cdn.staticfile.org/smooth-scroll/16.1.0/smooth-scroll.min.js" ></script>



  <script async src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js" ></script>


<!-- Plugins -->


  

  

  

  

  




  <script src="https://cdn.staticfile.org/prettify/r298/prettify.min.js" ></script>
  <script>
    $(document).ready(function () {
      $('pre').addClass('prettyprint  linenums');
      prettyPrint();
    })
  </script>



  <script src="https://cdn.staticfile.org/typed.js/2.0.10/typed.min.js" ></script>
  <script>
    var typed = new Typed('#subtitle', {
      strings: [
        '  ',
        "开源项目没有那么遥远&nbsp;",
      ],
      cursorChar: "_",
      typeSpeed: 70,
      loop: false,
    });
    typed.stop();
    $(document).ready(function () {
      $(".typed-cursor").addClass("h2");
      typed.start();
    });
  </script>



  <script src="https://cdn.staticfile.org/anchor-js/4.2.0/anchor.min.js" ></script>
  <script>
    anchors.options = {
      placement: "left",
      visible: "false",
      
    };
    var el = "h1,h2,h3,h4,h5,h6".split(",");
    var res = [];
    for (item of el) {
      res.push(".markdown-body > " + item)
    }
    anchors.add(res.join(", "))
  </script>



  <script src="/js/local-search.js" ></script>
  <script>
    var path = "/local-search.xml";
    var inputArea = document.querySelector("#local-search-input");
    inputArea.onclick = function () {
      getSearchFile(path);
      this.onclick = null
    }
  </script>



  <script src="https://cdn.staticfile.org/fancybox/3.5.7/jquery.fancybox.min.js" ></script>
  <script>
    $("#post img:not(.no-zoom img, img[no-zoom])").each(
      function () {
        var element = document.createElement("a");
        $(element).attr("data-fancybox", "images");
        $(element).attr("href", $(this).attr("src"));
        $(this).wrap(element);
      }
    );
  </script>







</body>
</html>
